# member_level_evaluator.py

def get_member_level(consumption_amount: float, points: int) -> str:
    """
    根据消费金额和积分评定会员等级。

    Args:
        consumption_amount (float): 用户的消费金额 (M)，单位：元。
        points (int): 用户的积分 (S)，单位：分。

    Returns:
        str: 评定出的会员等级字符串。
    """

    # 1. 钻石会员
    if consumption_amount >= 1000 and points >= 10000:
        return "钻石会员"
    # 2. 白金会员
    elif 500 <= consumption_amount < 1000 and 5000 <= points < 10000:
        return "白金会员"
    # 3. 黄金会员
    elif 200 <= consumption_amount < 500 and 2000 <= points < 5000:
        return "黄金会员"
    # 4. 白银会员
    elif 100 <= consumption_amount < 200 and 1000 <= points < 2000:
        return "白银会员"
    # 5. 青铜会员 (只看积分)
    elif 500 <= points < 1000:
        return "青铜会员"
    # 6. 普通会员 (只看积分)
    elif points < 500:
        return "普通会员"
    else:
        # 如果有消费金额，但积分和消费金额不匹配任何已知等级，
        # 比如 M=100，S=50，按当前规则会落到普通会员，但如果 M=1000，S=500，则会是青铜会员。
        # 这里的 else 语句是为了捕获所有未被明确定义的组合，理论上应该不会走到这里，
        # 但为了程序的健壮性，可以加上或根据实际业务需求处理。
        # 在这个特定的规则下，如果 M 或 S 负数等异常值，也可能走到这里。
        # 默认返回普通会员或者一个错误提示
        return "普通会员 (或未定义等级)"


def main():
    """
    主函数，用于演示会员等级评定功能。
    """
    print("--- 会员等级评定系统 ---")

    test_cases = [
        (1200, 12000, "钻石会员"),       # 钻石
        (800, 7500, "白金会员"),         # 白金
        (300, 3000, "黄金会员"),         # 黄金
        (150, 1500, "白银会员"),         # 白银
        (50, 700, "青铜会员"),           # 青铜 (消费金额不限，只看积分)
        (50, 300, "普通会员"),           # 普通 (消费金额不限，只看积分)
        (1000, 500, "普通会员 (或未定义等级)"), # 消费金额满足钻石，但积分S<500
        (100, 50, "普通会员"),            # 消费金额满足白银，但积分S<500
        (600, 2000, "普通会员 (或未定义等级)"), # 消费金额满足白金，但积分只到黄金
        (100, 999, "青铜会员"),           # M=100, S=999
        (99, 999, "青铜会员"),             # M=99, S=999
        (0, 0, "普通会员"),
        (0, 499, "普通会员"),
        (0, 500, "青铜会员"),
        (999.99, 9999, "白金会员")
    ]

    for m, s, expected in test_cases:
        level = get_member_level(m, s)
        print(f"消费金额 M={m}元, 积分 S={s}分 -> 会员等级: {level} (预期: {expected})")
        assert level == expected.split(' ')[0] or expected.split(' ')[0] in level, f"测试失败！M={m}, S={s}, 实际: {level}, 预期: {expected}"

    print("\n--- 手动输入测试 ---")
    while True:
        try:
            m_input = float(input("请输入消费金额 (M) 或输入 'q' 退出: "))
            if m_input == 'q':
                break
            s_input = int(input("请输入积分 (S) 或输入 'q' 退出: "))
            if s_input == 'q':
                break

            level = get_member_level(m_input, s_input)
            print(f"评定结果: M={m_input}元, S={s_input}分 -> 会员等级: {level}\n")
        except ValueError:
            print("输入无效，请输入数字或 'q' 退出。")
        except Exception as e:
            print(f"发生错误: {e}")

if __name__ == "__main__":
    main()